/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAOHibernate;

import DAO.TreinoDAO;
import entidade.Aluno;
import entidade.ExercicioTreino;
import entidade.Treino;
import entidade.TreinoPreTreino;
import java.util.Date;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;

/**
 *
 * @author Thais
 */
public class TreinoDAOHibernate implements TreinoDAO {

    @Override
    public boolean salvarTreino(Treino treino, char tipo) {
        Session session = null;
        Transaction transaction = null;

        try {
            session = HibernateUtil.getSessionfacotry().getCurrentSession();
            if (session == null) {
                session = HibernateUtil.getSessionfacotry().openSession();
            }
            transaction = session.getTransaction();
            if (!transaction.isActive()) {
                transaction = session.beginTransaction();
            }
            for (TreinoPreTreino treinoPreTreino : treino.getPreTreino()) {
                session.saveOrUpdate(treinoPreTreino);
            }
            for (ExercicioTreino exercicioTreino : treino.getExercicios()) {
                session.saveOrUpdate(exercicioTreino);
            }
            treino.setDataInicio(new Date());
            if (tipo == 'U') {
                session.merge(treino);
            } else {
                session.save(treino);
            }
            transaction.commit();
            return true;
        } catch (HibernateException e) {
            System.out.println("Não foi possível inserir o conf. Erro:" + e.getMessage());
        } finally {
            try {
                if (session.isOpen()) {
                    session.close();
                }
            } catch (Throwable e2) {
                System.out.println("Erro ao fechar operação de inserção. Mensagem: " + e2.getMessage());
            }
        }
        return false;
    }

    @Override
    public List<Treino> buscarTreino(Aluno aluno) {
        try {
            EntityManagerFactory emf = Persistence.createEntityManagerFactory("ProjetoFinalClientePU");
            EntityManager em = emf.createEntityManager();
            Query buscar = em.createQuery("Select object(c) from Treino as c where c.aluno = ?1 order by c.dataInicio desc, c.idTreino desc");
            buscar.setParameter(1, aluno);
            if (buscar.getResultList().size() > 0) {
                return buscar.getResultList();
            }
        } catch (HibernateException e) {
            System.out.println("Não foi possível inserir o conf. Erro:" + e.getMessage());
        } finally {
            try {
            } catch (Throwable e2) {
                System.out.println("Erro ao fechar operação de inserção. Mensagem: " + e2.getMessage());
            }
        }
        return null;
    }
}
